# -*- coding: utf-8 -*-

import os


# ==================== 四、项目创建 ====================

# 父类：AIAssistant
class AIAssistant:
    """AI助手父类，定义所有助手共有的基础属性和方法"""

    def __init__(self, assistant_id, name, assistant_type, version, is_online, score):
        self.id = assistant_id
        self.name = name
        self.type = assistant_type
        self.version = version
        self.is_online = is_online
        self.score = score

    def display_info(self):
        """显示助手的基本信息"""
        status = "🟢在线" if self.is_online else "🔴离线"
        return f"ID: {self.id}, 名称: {self.name}, 类型: {self.type}, 版本: {self.version}, 状态: {status}, 能力评分: {self.score} [{self.type}]"

    def execute_task(self, task):
        """执行任务（由子类重写）"""
        if not self.is_online:
            return f"❌ {self.name} 当前离线，无法执行任务。"
        return f"✅ {self.name} 正在执行任务: '{task}'... (模拟执行)"


# 子类：文本生成助手
class TextAssistant(AIAssistant):
    def __init__(self, assistant_id, name, version, is_online, score, language_model="GPT"):
        super().__init__(assistant_id, name, "文本助手", version, is_online, score)
        self.language_model = language_model

    def execute_task(self, task):
        if not self.is_online:
            return f"❌ {self.name} 当前离线，无法执行任务。"
        return f"✅ {self.name} 正在使用 {self.language_model} 模型为您生成文本: '{task}'..."


# 子类：图片生成助手
class ImageAssistant(AIAssistant):
    def __init__(self, assistant_id, name, version, is_online, score, style="写实"):
        super().__init__(assistant_id, name, "图像助手", version, is_online, score)
        self.style = style

    def execute_task(self, task):
        if not self.is_online:
            return f"❌ {self.name} 当前离线，无法执行任务。"
        return f"✅ {self.name} 正在为您生成 '{self.style}' 风格的图片: '{task}'..."


# 子类：数据分析助手
class DataAnalysisAssistant(AIAssistant):
    def __init__(self, assistant_id, name, version, is_online, score, supported_formats=["CSV", "JSON"]):
        super().__init__(assistant_id, name, "数据分析助手", version, is_online, score)
        self.supported_formats = supported_formats

    def execute_task(self, task):
        if not self.is_online:
            return f"❌ {self.name} 当前离线，无法执行任务。"
        return f"✅ {self.name} 正在分析数据: '{task}'..."


# 子类：翻译助手
class TranslationAssistant(AIAssistant):
    def __init__(self, assistant_id, name, version, is_online, score, languages=["中", "英"]):
        super().__init__(assistant_id, name, "翻译助手", version, is_online, score)
        self.languages = languages

    def execute_task(self, task):
        if not self.is_online:
            return f"❌ {self.name} 当前离线，无法执行任务。"
        return f"✅ {self.name} 正在翻译: '{task}'..."


# 子类：语音助手
class VoiceAssistant(AIAssistant):
    def __init__(self, assistant_id, name, version, is_online, score, voice_type="女声"):
        super().__init__(assistant_id, name, "语音助手", version, is_online, score)
        self.voice_type = voice_type

    def execute_task(self, task):
        if not self.is_online:
            return f"❌ {self.name} 当前离线，无法执行任务。"
        return f"✅ {self.name} ({self.voice_type}) 正在处理语音指令: '{task}'..."


# 管理类：AIManager
class AIManager:
    """AI助手管理器，负责所有助手的增删改查等操作"""

    def __init__(self, max_capacity=20):
        # 使用列表来存储助手，比固定大小数组更灵活，但可以限制最大容量
        self.assistants = []
        self.max_capacity = max_capacity
        self._initialize_default_assistants()

    def _initialize_default_assistants(self):
        """初始化一些默认的助手数据"""
        self.add_assistant(TextAssistant(101, "文小助", "v2.0", True, 92))
        self.add_assistant(ImageAssistant(103, "图灵", "v1.5", False, 88))
        self.add_assistant(DataAnalysisAssistant(104, "数小析", "v1.0", True, 79))
        self.add_assistant(TranslationAssistant(105, "翻译精灵", "v2.1", False, 95))
        self.add_assistant(VoiceAssistant(101, "小智", "v1.2", True, 85))  # 注意：ID重复了，这里按文档来，实际应避免

    def add_assistant(self, assistant):
        """添加一个新的助手"""
        if len(self.assistants) >= self.max_capacity:
            print("❌ 助手列表已满，无法添加新助手！")
            return False

        # 检查ID是否已存在
        if self.find_assistant_by_id(assistant.id):
            print(f"❌ ID {assistant.id} 已存在，添加失败！")
            return False

        self.assistants.append(assistant)
        return True

    def find_assistant_by_id(self, assistant_id):
        """根据ID查找助手，返回助手对象或None"""
        for assistant in self.assistants:
            if assistant.id == assistant_id:
                return assistant
        return None

    def delete_assistant_by_id(self, assistant_id):
        """根据ID删除助手"""
        assistant = self.find_assistant_by_id(assistant_id)
        if assistant:
            self.assistants.remove(assistant)
            return assistant
        return None

    def display_all_assistants(self):
        """显示所有助手列表"""
        if not self.assistants:
            print("当前没有任何AI助手。")
            return

        print("所有AI助手列表：")
        for i, assistant in enumerate(self.assistants, 1):
            print(f"{i}. {assistant.display_info()}")

    def get_statistics(self):
        """获取系统统计信息"""
        total = len(self.assistants)
        online_count = sum(1 for a in self.assistants if a.is_online)
        offline_count = total - online_count

        if total == 0:
            avg_score = 0
        else:
            avg_score = sum(a.score for a in self.assistants) / total

        return total, online_count, offline_count, avg_score


# ==================== 主程序和交互逻辑 ====================

def display_menu():
    """显示主菜单"""
    print("\n========== AI助手管理器 ==========")
    print("1. 查看所有AI助手列表")
    print("2. 根据ID查询助手详情")
    print("3. 添加新的AI助手")
    print("4. 根据ID修改助手信息")
    print("5. 删除助手（按ID）")
    print("6. 启动AI助手服务")
    print("7. 停止AI助手服务")
    print("8. 为AI助手分配任务")
    print("9. 显示系统统计信息")
    print("0. 退出系统")
    print("===================================")


def main():
    """主函数，程序入口"""
    manager = AIManager()

    while True:
        display_menu()
        choice = input("请选择操作: ")

        if choice == '1':
            # 1. 查看所有AI助手列表
            manager.display_all_assistants()

        elif choice == '2':
            # 2. 根据ID查询助手详情
            try:
                assistant_id = int(input("请输入要查询的AI助手ID: "))
                assistant = manager.find_assistant_by_id(assistant_id)
                if assistant:
                    print(f"✅ 查询结果: {assistant.display_info()}")
                else:
                    print(f"❌ 未找到ID为 {assistant_id} 的助手。")
            except ValueError:
                print("❌ 无效的ID，请输入一个数字。")

        elif choice == '3':
            # 3. 添加新的AI助手
            print("--- 添加新AI助手 ---")
            try:
                assistant_id = int(input("请输入ID: "))
                name = input("请输入名称: ")
                version = input("请输入版本号: ")
                is_online = True if input("是否在线？(1-是, 0-否): ") == '1' else False
                score = int(input("请输入能力评分(0-100): "))

                # 简化版：直接添加为父类实例，实际应用中可以让用户选择类型
                new_assistant = AIAssistant(assistant_id, name, "通用助手", version, is_online, score)
                if manager.add_assistant(new_assistant):
                    print(f"✅ 助手【{name}】添加成功！")
            except ValueError:
                print("❌ 输入无效，ID和评分必须是数字。")

        elif choice == '4':
            # 4. 根据ID修改助手信息
            print("--- 修改AI助手数据 ---")
            try:
                assistant_id = int(input("请输入ID: "))
                assistant = manager.find_assistant_by_id(assistant_id)
                if not assistant:
                    print(f"❌ 未找到ID为 {assistant_id} 的助手。")
                    continue

                print("可修改属性列表为：name, type, version, online, score")
                attr_value = input("请输入要修改的属性和值，用空格分割 (例如: score 100): ").split()
                if len(attr_value) != 2:
                    print("❌ 输入格式错误。")
                    continue

                attr, value = attr_value
                if hasattr(assistant, attr):
                    if attr == 'score' or attr == 'id':
                        value = int(value)
                    elif attr == 'is_online':
                        value = True if value == '1' or value.lower() == 'true' else False

                    setattr(assistant, attr, value)
                    print(f"✅ 助手【{assistant_id}】修改成功！")
                else:
                    print(f"❌ 属性 '{attr}' 不存在。")
            except ValueError:
                print("❌ 输入无效，请确保值类型正确（数字或布尔值）。")

        elif choice == '5':
            # 5. 删除助手（按ID）
            try:
                assistant_id = int(input("请输入要删除的AI助手ID: "))
                deleted_assistant = manager.delete_assistant_by_id(assistant_id)
                if deleted_assistant:
                    print(f"✅ 助手【{deleted_assistant.name}】已删除。")
                else:
                    print(f"❌ 未找到ID为 {assistant_id} 的助手。")
            except ValueError:
                print("❌ 无效的ID，请输入一个数字。")

        elif choice == '6':
            # 6. 启动AI助手服务
            try:
                assistant_id = int(input("请输入要启动的AI助手ID: "))
                assistant = manager.find_assistant_by_id(assistant_id)
                if assistant:
                    if assistant.is_online:
                        print(f"助手【{assistant.name}】已在运行。")
                    else:
                        assistant.is_online = True
                        print(f"✅ 助手【{assistant.name}】已启动。")
                else:
                    print(f"❌ 未找到ID为 {assistant_id} 的助手。")
            except ValueError:
                print("❌ 无效的ID，请输入一个数字。")

        elif choice == '7':
            # 7. 停止AI助手服务
            try:
                assistant_id = int(input("请输入要停止的AI助手ID: "))
                assistant = manager.find_assistant_by_id(assistant_id)
                if assistant:
                    if not assistant.is_online:
                        print(f"助手【{assistant.name}】已经是离线状态。")
                    else:
                        assistant.is_online = False
                        print(f"✅ 助手【{assistant.name}】已停止。")
                else:
                    print(f"❌ 未找到ID为 {assistant_id} 的助手。")
            except ValueError:
                print("❌ 无效的ID，请输入一个数字。")

        elif choice == '8':
            # 8. 为AI助手分配任务
            try:
                assistant_id = int(input("请输入目标AI助手ID: "))
                task = input("请输入任务内容: ")
                assistant = manager.find_assistant_by_id(assistant_id)
                if assistant:
                    result = assistant.execute_task(task)
                    print(result)
                else:
                    print(f"❌ 未找到ID为 {assistant_id} 的助手。")
            except ValueError:
                print("❌ 无效的ID，请输入一个数字。")

        elif choice == '9':
            # 9. 显示系统统计信息
            total, online, offline, avg_score = manager.get_statistics()
            print("\n系统统计信息：")
            print(f"总助手数: {total}")
            print(f"在线助手数: {online}")
            print(f"离线助手数: {offline}")
            print(f"平均能力评分: {avg_score:.2f}")

        elif choice == '0':
            # 0. 退出系统
            print("感谢使用AI助手管理器，再见！")
            break

        else:
            print("❌ 无效的选择，请输入菜单中列出的数字。")


if __name__ == "__main__":
    main()

